/*
 * Copyright (C), 2005-2018, 上海瑛麒动漫科技有限公司
 * FileName: StringUtils.java
 * Author:   tianmu
 * Date:     2018年3月2日 上午9:43:37
 * Description: //模块目的、功能描述
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.sfang.common.util.string;

import com.sfang.common.base.constant.StringCode;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉
 *
 * @author tianmu
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public class StringUtils {

    public static String toLowerCaseFirst(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        char firstChar = str.charAt(0);
        char updatedFirstChar = Character.toLowerCase(firstChar);
        String remainder = str.substring(1);
        return updatedFirstChar + remainder;
    }

    /**
     * 功能描述: <br>
     * 压缩JSON
     *
     * @param json
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String compressJson(String json) {
        return json != null ? json.replaceAll("\r\n", StringCode.EMPTY).replaceAll(StringCode.SPACE, StringCode.EMPTY)
                : json;
    }

    public static Set<Object> parseStringToIntegers(String value) {
        try {
            List<String> input = Arrays.asList(value.split("\\|"));
            Set<Object> output = new HashSet<Object>();

            CollectionUtils.collect(input, new Transformer() {
                @Override
                public Object transform(Object o) {
                    return Integer.valueOf(o.toString());
                }
            }, output);

            return output;
        } catch (Exception e) {
            return null;
        }
    }

    public static Set<Object> parseStringToAlternative(String value, String additional) {
        try {
            List<String> input = Arrays.asList(value.split("\\|"));
            Set<Object> output = new HashSet();

            CollectionUtils.collect(input, new Transformer() {
                @Override
                public Object transform(Object o) {
                    return o.toString() + "|" + additional;
                }
            }, output);

            return output;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 功能描述: <br>
     * 压缩SQL
     *
     * @param sql
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String compressSQL(String sql) {
        return sql != null ? sql.replaceAll("\\s{1,}", StringCode.SPACE) : sql;
    }

    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

    public static Long convertIpToLong(String ipaddr) {
        String ip[] = ipaddr.split("\\.");
        Long ipLong = 256 * 256 * 256 * Long.parseLong(ip[0]) +
                256 * 256 * Long.parseLong(ip[1]) +
                256 * Long.parseLong(ip[2]) +
                Long.parseLong(ip[3]);
        return ipLong;
    }

    public static boolean hasText(String str) {
        return hasText((CharSequence) str);
    }

    public static boolean hasText(CharSequence str) {
        if (!hasLength(str)) {
            return false;
        } else {
            int strLen = str.length();

            for (int i = 0; i < strLen; ++i) {
                if (!Character.isWhitespace(str.charAt(i))) {
                    return true;
                }
            }

            return false;
        }
    }

    public static boolean hasLength(CharSequence str) {
        return str != null && str.length() > 0;
    }
}
